'''
文件和文件夹的操作
文件和文件夹的操作是通过 os 模块来实现的。
os 模块提供了许多函数来操作文件和文件夹。

文件夹相关操作
os.mkdir(path) 创建文件夹
os.makedirs(path) 创建文件夹及其父文件夹
os.rmdir(path) 删除空文件夹
os.removedirs(path) 删除空文件夹及其父文件夹

os.chdir(path) 改变当前工作目录
os.getcwd() 获取当前工作目录
os.listdir(path) 列出文件夹中的所有文件和文件夹
os.walk(top, topdown=True, onerror=None, followlinks=False) 遍历文件夹
os.rename(old, new) 重命名文件或文件夹
os.remove(path) 删除文件






文件相关操作
os.open(path, flags, mode=0o777, *, dir_fd=None) 打开文件
os.close(fd) 关闭文件
os.read(fd, n) 读取文件
os.write(fd, b) 写入文件
os.fstat(fd) 获取文件的状态
os.fchmod(fd, mode) 修改文件的权限
os.fchown(fd, uid, gid) 修改文件的所有者
os.futile(fd, times=None) 修改文件的时间戳
os.chdir(fd) 改变当前工作目录
os.fstat(fd) 获取文件描述符的状态
os.chdir(fd) 改变当前工作目录



os.path 文件路径操作
os.path 模块提供了许多函数来操作文件路径。
os.path.exists(path) 判断路径是否存在
os.path.isfile(path) 判断路径是否是文件
os.path.isdir(path) 判断路径是否是文件夹
os.path.join(path, *paths) 连接路径
os.path.split(path) 分割路径
os.path.splitext(path) 分割路径和扩展名
os.path.basename(path) 获取路径的文件名
os.path.dirname(path) 获取路径的目录名


os.path.getsize(path) 获取文件的大小
os.path.getmtime(path) 获取文件的修改时间
os.path.getatime(path) 获取文件的访问时间
os.path.getctime(path) 获取文件的创建时间
os.path.abspath(path) 获取文件的绝对路径
os.path.realpath(path) 获取文件的真实路径
os.path.relpath(path, start) 获取文件的相对路径
os.path.normpath(path) 规范化路径
os.path.normcase(path) 规范化路径大小写
os.path.expanduser(path) 展开用户目录
os.path.expandvars(path) 展开环境变量

文件操作
os.open(file, flags, mode) 打开文件
os.close(fd) 关闭文件
os.read(fd, n) 读取文件
os.write(fd, buf) 写入文件
os.seek(fd, offset, whence) 移动文件指针
os.fstat(fd) 获取文件状态
os.fchmod(fd, mode) 修改文件权限
os.fchown(fd, uid, gid) 修改文件所有者
os.ftruncate(fd, length) 截断文件
os.fsync(fd) 同步文件
os.fdatasync(fd) 同步文件数据
os.dup(fd) 复制文件描述符
os.dup2(fd1, fd2) 复制文件描述符
os.chdir(path) 改变当前工作目录
os.chroot(path) 改变根目录
os.chdir(path) 改变当前工作目录
os.chroot(path) 改变根目录





'''

import os
import shutil
# 1. 查看当前目录
print(os.getcwd())

# 改变当前工作目录
# os.chdir('D:\\python\\demo')
# print(os.getcwd())

# 2. 查看目录下的文件和文件夹
print(os.listdir())

# 3. 创建文件夹
# print(os.path.split(os.getcwd()))
# os.mkdir('tmp') # 文件夹存在会报错
# os.makedirs('tmp/a/b/c',exist_ok=True) # 文件夹存在不会报错，注意要带上exist_ok=True参数

# 4. 删除文件夹
# os.rmdir('tmp') # 目录下有文件会报错
# shutil.rmtree('tmp') # 目录下有文件不会报错

# 5. 重命名文件夹
# os.mkdir('tmp')
# os.rename('tmp', 'tmp2')

# 6. 复制文件夹
# shutil.copytree('tmp2', 'tmp3')

# 7. 移动文件夹
# shutil.move('tmp3', 'tmp4')


# 目录路径
directory_path = os.getcwd()
# 遍历目录
for root, dirs, files in os.walk(directory_path):
    # 打印当前目录路径
    print(root) # 打印当前目录路径
    print(dirs) # 打印当前目录下的所有子目录
    print(files) # 打印当前目录下的所有文件
    print('------------------')